// http.js
class HttpRequest {
	constructor(config = {}) {
		// 默认配置
		this.defaultConfig = {
			baseUrl: '', // 接口根地址
			timeout: 60000, // 超时时间（单位ms）
			header: {
				'Content-Type': 'application/json'
			}, // 默认请求头
			showLoading: true, // 默认显示loading
			...config // 合并自定义配置
		};
	}

	// 核心请求方法
	async request(method, url, data = {}, config = {}) {
		// 合并配置
		const mergedConfig = {
			...this.defaultConfig,
			...config
		};

		// 处理完整URL
		const fullUrl = url.startsWith('http') ? url : `${mergedConfig.baseUrl}${url}`;

		// 请求配置
		let requestConfig = {
			url: fullUrl,
			method: method.toUpperCase(),
			data,
			timeout: mergedConfig.timeout,
			header: {
				...mergedConfig.header,
				...(config.header || {})
			}
		};
		// 添加token
		const token = uni.getStorageSync('token')
		if (token) {
			requestConfig.header.Token = `${token}`
		}

		// 发送请求
		return new Promise((resolve, reject) => {
			// 根据配置决定是否显示loading
			if (mergedConfig.showLoading) {
				uni.showLoading({
					title: '数据加载中!'
				})
			}
			const requestTask = uni.request({
				...requestConfig,
				success: async (response) => {
					const tokenCode = [40004, 40005, 40006, 40007, 40008]
					if (tokenCode.includes(response.data.code)) {
						// token失效，跳转到登录页面
						uni.reLaunch({
							url: '/pages/login/phoneLogin'
						})
						return
					}
					uni.hideLoading()
					resolve(response.data);
				},
				fail: (error) => {
					reject({
						code: 'NETWORK_ERROR',
						message: '网络请求失败',
						error
					});
				},
				complete() {
					// 根据配置决定是否隐藏loading
					if (mergedConfig.showLoading) {
						setTimeout(() => {
							uni.hideLoading()
						}, 1000)
					}
				}
			});
		});
	}

	// GET请求
	get(url, params = {}, config = {}) {
		return this.request('GET', url, params, config);
	}

	// POST请求
	post(url, data = {}, config = {}) {
		return this.request('POST', url, data, config);
	}
}
// export const baseUrl = 'https://xsgl.hbhgkj.edu.cn/api/webApp'
export const baseUrl = 'https://hkqnyd.hbhgkj.edu.cn/api/mini'
// export const baseUrl = 'http://172.31.68.47:9089/api/webApp' 
// export const baseUrl = 'http://121.40.136.253:9089/api/webApp'

// 导出实例
const http = new HttpRequest({
	baseUrl,
});
export default http